Micron Document
🎖️GitЯра🎖️


Displaying Raw • Download

feature/map/src/commonMain/kotlin/org/meshtastic/feature/map/component/SitePlannerParams.kt bbef7670a13ecb0bbdd88f6a0ca886fc4bdb0e9a (bbef7670) Text, 6.03 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.map.component

T8b949e/**
* Transmitter parameters for a Meshtastic Site Planner coverage estimate. Maps onto the planner's flat query contract
* (`?lat=&lon=&name=&tx_power=&tx_freq=&tx_height=&tx_gain=`), so [toQueryUrl] can hand a configured, auto-running view
* to the planner without knowing its internal parameter schema.
*/
Tff7b72data Tff7b72class T56d364SitePlannerParamsTb4b4b4(
Tff7b72val Te6edf3nameTb4b4b4: Tffa657StringTb4b4b4,
Tff7b72val Te6edf3latitudeTb4b4b4: Tffa657DoubleTb4b4b4,
Tff7b72val Te6edf3longitudeTb4b4b4: Tffa657DoubleTb4b4b4,
Tff7b72val Te6edf3txPowerWattsTb4b4b4: Tffa657Double Tff7b72= Te6edf3DEFAULT_TX_POWER_WATTSTb4b4b4,
Tff7b72val Te6edf3txFreqMhzTb4b4b4: Tffa657Double Tff7b72= Te6edf3DEFAULT_TX_FREQ_MHZTb4b4b4,
Tff7b72val Te6edf3txHeightMetersTb4b4b4: Tffa657Double Tff7b72= Te6edf3DEFAULT_TX_HEIGHT_METERSTb4b4b4,
Tff7b72val Te6edf3txGainDbiTb4b4b4: Tffa657Double Tff7b72= Te6edf3DEFAULT_TX_GAIN_DBITb4b4b4,
Tff7b72val Te6edf3colorScaleTb4b4b4: Tffa657String Tff7b72= Te6edf3DEFAULT_COLOR_SCALETb4b4b4,
T8b949e// Advanced fields — default to the planner's own values, so sending them is behaviorally identical to omitting
T8b949e// them (they just make the hand-off explicit). Surfaced behind an "Advanced" section in the form.
Tff7b72val Te6edf3rxSensitivityDbmTb4b4b4: Tffa657Double Tff7b72= Te6edf3DEFAULT_RX_SENSITIVITY_DBMTb4b4b4,
Tff7b72val Te6edf3rxHeightMetersTb4b4b4: Tffa657Double Tff7b72= Te6edf3DEFAULT_RX_HEIGHT_METERSTb4b4b4,
Tff7b72val Te6edf3maxRangeKmTb4b4b4: Tffa657Double Tff7b72= Te6edf3DEFAULT_MAX_RANGE_KMTb4b4b4,
Tff7b72val Te6edf3highResolutionTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3minDbmTb4b4b4: Tffa657Double Tff7b72= Te6edf3DEFAULT_MIN_DBMTb4b4b4,
Tff7b72val Te6edf3maxDbmTb4b4b4: Tffa657Double Tff7b72= Te6edf3DEFAULT_MAX_DBMTb4b4b4,
Tff7b72val Te6edf3overlayTransparencyTb4b4b4: Tffa657Int Tff7b72= Te6edf3DEFAULT_OVERLAY_TRANSPARENCYTb4b4b4,
Tb4b4b4) Tb4b4b4{
T8b949e/**
* Build the planner URL that prefills these params and auto-runs the simulation (`run=1`), asking the planner to
* hand the result to a native host bridge (`bridge=1`) rather than the share sheet. Advanced params map onto the
* planner's flat query contract (receiver / simulation / display sections).
*/
Tff7b72fun Td2a8fftoQueryUrlTb4b4b4(Te6edf3baseUrlTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Tffa657String Tb4b4b4{
Tff7b72val Te6edf3query Tff7b72= Te6edf3buildString Tb4b4b4{
Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6fflat=Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3latitudeTb4b4b4)
Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff&lon=Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3longitudeTb4b4b4)
Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff&name=Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3encodeQueryComponentTb4b4b4(Te6edf3nameTb4b4b4)Tb4b4b4)
Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff&tx_power=Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3txPowerWattsTb4b4b4)
Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff&tx_freq=Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3txFreqMhzTb4b4b4)
Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff&tx_height=Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3txHeightMetersTb4b4b4)
Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff&tx_gain=Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3txGainDbiTb4b4b4)
Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff&color_scale=Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3encodeQueryComponentTb4b4b4(Te6edf3colorScaleTb4b4b4)Tb4b4b4)
Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff&rx_sensitivity=Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3rxSensitivityDbmTb4b4b4)
Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff&rx_height=Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3rxHeightMetersTb4b4b4)
Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff&max_range=Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3maxRangeKmTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3highResolutionTb4b4b4) Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff&high_res=1Ta5d6ff"Tb4b4b4)
Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff&min_dbm=Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3minDbmTb4b4b4)
Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff&max_dbm=Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3maxDbmTb4b4b4)
Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff&overlay_transparency=Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3overlayTransparencyTb4b4b4)
Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff&run=1&bridge=1Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3separator Tff7b72= Tff7b72if Tb4b4b4(Te6edf3baseUrlTb4b4b4.Te6edf3endsWithTb4b4b4(Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4)Tb4b4b4) Ta5d6ff"Ta5d6ff" Tff7b72else Ta5d6ff"Ta5d6ff/Ta5d6ff"
Tff7b72return Ta5d6ff"Tffd700$Te6edf3baseUrlTffd700$Te6edf3separatorTa5d6ff?Tffd700$Te6edf3queryTa5d6ff"
Tb4b4b4}

Tff7b72companion Tff7b72object Tb4b4b4{
T8b949e// Meshtastic-typical stock defaults; all editable in the form before submission. Values mirror the planner's
T8b949e// own factory defaults (src/store.ts defaultParams()) so an untouched form matches a fresh planner session.
Tff7b72const Tff7b72val Te6edf3DEFAULT_TX_POWER_WATTSTb4b4b4: Tffa657Double Tff7b72= T79c0ff0.1
Tff7b72const Tff7b72val Te6edf3DEFAULT_TX_FREQ_MHZTb4b4b4: Tffa657Double Tff7b72= T79c0ff9T79c0ff0T79c0ff7.0
Tff7b72const Tff7b72val Te6edf3DEFAULT_TX_HEIGHT_METERSTb4b4b4: Tffa657Double Tff7b72= T79c0ff2.0
Tff7b72const Tff7b72val Te6edf3DEFAULT_TX_GAIN_DBITb4b4b4: Tffa657Double Tff7b72= T79c0ff2.0
Tff7b72const Tff7b72val Te6edf3DEFAULT_COLOR_SCALETb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ffplasmaTa5d6ff"
Tff7b72const Tff7b72val Te6edf3DEFAULT_RX_SENSITIVITY_DBMTb4b4b4: Tffa657Double Tff7b72= Tff7b72-T79c0ff1T79c0ff3T79c0ff0.0
Tff7b72const Tff7b72val Te6edf3DEFAULT_RX_HEIGHT_METERSTb4b4b4: Tffa657Double Tff7b72= T79c0ff1.0
Tff7b72const Tff7b72val Te6edf3DEFAULT_MAX_RANGE_KMTb4b4b4: Tffa657Double Tff7b72= T79c0ff3T79c0ff0.0
Tff7b72const Tff7b72val Te6edf3DEFAULT_MIN_DBMTb4b4b4: Tffa657Double Tff7b72= Tff7b72-T79c0ff1T79c0ff3T79c0ff0.0
Tff7b72const Tff7b72val Te6edf3DEFAULT_MAX_DBMTb4b4b4: Tffa657Double Tff7b72= Tff7b72-T79c0ff8T79c0ff0.0
Tff7b72const Tff7b72val Te6edf3DEFAULT_OVERLAY_TRANSPARENCYTb4b4b4: Tffa657Int Tff7b72= T79c0ff5T79c0ff0

T8b949e// Validation ranges mirroring the planner's input constraints (src/components/*.vue).
Tff7b72const Tff7b72val Te6edf3MIN_FREQ_MHZTb4b4b4: Tffa657Double Tff7b72= T79c0ff2T79c0ff0.0
Tff7b72const Tff7b72val Te6edf3MAX_FREQ_MHZTb4b4b4: Tffa657Double Tff7b72= T79c0ff2T79c0ff0Te6edf3_000Tb4b4b4.T79c0ff0
Tff7b72const Tff7b72val Te6edf3MIN_RX_SENSITIVITY_DBMTb4b4b4: Tffa657Double Tff7b72= Tff7b72-T79c0ff1T79c0ff5T79c0ff0.0
Tff7b72const Tff7b72val Te6edf3MAX_RX_SENSITIVITY_DBMTb4b4b4: Tffa657Double Tff7b72= Tff7b72-T79c0ff3T79c0ff0.0
Tff7b72const Tff7b72val Te6edf3MAX_RANGE_STANDARD_KMTb4b4b4: Tffa657Double Tff7b72= T79c0ff1T79c0ff5T79c0ff0.0
Tff7b72const Tff7b72val Te6edf3MAX_RANGE_HIGH_RES_KMTb4b4b4: Tffa657Double Tff7b72= T79c0ff7T79c0ff0.0
Tff7b72const Tff7b72val Te6edf3MIN_TRANSPARENCYTb4b4b4: Tffa657Int Tff7b72= T79c0ff0
Tff7b72const Tff7b72val Te6edf3MAX_TRANSPARENCYTb4b4b4: Tffa657Int Tff7b72= T79c0ff1T79c0ff0T79c0ff0

T8b949e/** Coverage palettes the planner ships (value → label), mirroring its Display.vue picker. */
Tff7b72val Te6edf3COLOR_SCALESTb4b4b4: Te6edf3ListTff7b72<Te6edf3PairTff7b72<Tffa657StringTb4b4b4, Tffa657StringTff7b72>Tff7b72> Tff7b72=
Te6edf3listOfTb4b4b4(
Ta5d6ff"Ta5d6ffplasmaTa5d6ff" Te6edf3to Ta5d6ff"Ta5d6ffPlasmaTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffviridisTa5d6ff" Te6edf3to Ta5d6ff"Ta5d6ffViridis (colorblind-safe)Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffCMRmapTa5d6ff" Te6edf3to Ta5d6ff"Ta5d6ffCMR mapTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffcoolTa5d6ff" Te6edf3to Ta5d6ff"Ta5d6ffCoolTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffturboTa5d6ff" Te6edf3to Ta5d6ff"Ta5d6ffTurboTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffjetTa5d6ff" Te6edf3to Ta5d6ff"Ta5d6ffJetTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tff7b72const Tff7b72val Te6edf3UNRESERVED Tff7b72= Ta5d6ff"Ta5d6ffABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~Ta5d6ff"
Tff7b72private Tff7b72val Te6edf3HEX Tff7b72= Ta5d6ff"Ta5d6ff0123456789ABCDEFTa5d6ff"Tb4b4b4.Te6edf3toCharArrayTb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72const Tff7b72val Te6edf3BYTE_MASK Tff7b72= T79c0ff0Te6edf3xFF
Tff7b72private Tff7b72const Tff7b72val Te6edf3ASCII_LIMIT Tff7b72= T79c0ff0Te6edf3x80
Tff7b72private Tff7b72const Tff7b72val Te6edf3NIBBLE_BITS Tff7b72= T79c0ff4
Tff7b72private Tff7b72const Tff7b72val Te6edf3NIBBLE_MASK Tff7b72= T79c0ff0Te6edf3xF

T8b949e/** Percent-encode a query-component value (UTF-8), so names with spaces/non-ASCII survive the round trip. */
Tff7b72internal Tff7b72fun Td2a8ffencodeQueryComponentTb4b4b4(Te6edf3valueTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Tffa657String Tff7b72= Te6edf3buildString Tb4b4b4{
Tff7b72for Tb4b4b4(Te6edf3byte Tff7b72in Te6edf3valueTb4b4b4.Te6edf3encodeToByteArrayTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3code Tff7b72= Te6edf3byteTb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4) Te6edf3and Te6edf3BYTE_MASK
Tff7b72if Tb4b4b4(Te6edf3code Tff7b72< Te6edf3ASCII_LIMIT Tff7b72&Tff7b72& Te6edf3codeTb4b4b4.Te6edf3toCharTb4b4b4(Tb4b4b4) Tff7b72in Te6edf3UNRESERVEDTb4b4b4) Tb4b4b4{
Te6edf3appendTb4b4b4(Te6edf3codeTb4b4b4.Te6edf3toCharTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3appendTb4b4b4(Ta5d6ff'%'Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3HEXTff7b72[Te6edf3code Te6edf3shr Te6edf3NIBBLE_BITSTff7b72]Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3HEXTff7b72[Te6edf3code Te6edf3and Te6edf3NIBBLE_MASKTff7b72]Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.08s